`..`._.Enhanced Deathmatch._.``..`


Author: Smartball
Date of Creation: December, 2005

Public Release 4.0

E-mail: Smartbaiii@hotmail.com

List of credits (in NO particular order):

	--> Zombie - Major pieces of advice in the ways of console replacement/client-side package removal
	--> }TCP{Wolf - Advice, code ideas, examples and thanks for the permission to include UTF skins
	--> UTeamSkin distribution
		--> Martin Davies (squirrelsoftware) - teamskins from RealCTF
		--> SA|Shambler - teamskins from Infiltration
	--> Hyper.nl - Lots of testing and feedback regarding the console :D
	--> {Z}Trinity - General support through the production of EDM2 ;)
	--> Joss - Responsible for the basecode of the SummonP, PSummon, and NoFly commands
	--> sAllEydEth_DeWicKeD - Providing me with a playground for my work and a stage to get the original mod rolling
	--> The regular players of Smartball's Funhouse and the Yellow Submarine server
		--Constant feedback and ideas for the betterment of the mod
	--> {hLk}ArtfulDodger - Ran the EDM2 beta and happily switched around various settings to help determine a player 
				count glitch
	--> Rab1d - Ideas about the NeverSwitchOnPickup and Anti-TauntWalking features
	--> SA|Shambler - Original EDM2 console replacement ideas and code examples
	--> .:..: - The odd dot guy who pointed out some replicated variables that were responsible for big security flaws
		    in EDM1

Additional thanks to everyone who ran the mod and provided feedback, specifically to Bring_It (CW Team Server), Havok (hLk Team Server), Mystic Man (A silly man without a server but who loved to help me test ;) ) and AcidRain(TNN Servers).

Anyone else not included here who should be I apologize if I forgot you!


Included files:

NECESSARY FILES
---------------
EnhancedDM4.u
EnhancedDM4.int
EDM3Voice.u
EDM4ServerQuery.u
EDMIPLOG.ini
EnhancedDM.ini
EDMMAPS.ini
EDMStat.ini
EDMSkaarjSkins.utx

EXTRA MUTATOR ADD-ONS
---------------------
EDM4InstaGib.u
EDM4BattleFG.u
EDM4DualMags.u
EDM4WeaponDrop.u
EDM4EndGameVote.u
EDM4OldFeatures.u
EDM4Logo.u
EDM4UTeamSkins.u
EDM4Ready.u
EDM4Inf.u

---====HISTORY===---

The idea for the mod all started on the Yellow Submarine server, hosted by sAllEydEth_DeWicKeD, in June of 2003. I would play there regularly, but on my 56k, I would always get kicked offline. I got tired of re-entering and ending up with a score of 0, when I had been in the lead just 40 seconds earlier. So to counter this, I started work on a score recovery mod. At the same time, Salley wanted to have a mod that would notify her of people downloading. So to add on to the score recovery, I made the mod also detect downloaders. I posted on the Yellow Sub board for ideas, threw a few in, and viola, we had the first basic version of EDM. It had a lag graph, private messages, download detection, score recovery, and some extra admin features. As time passed, the players of Yellow Sub gave me more and more ideas, and I came up with plenty of my own. I added the ideas in one after the other, and the need for extra standalone mods on the server decreased as EDM became its own standalone mod with all necessary features. Yellow Sub moved to UT around September 2003. We stayed there and I learned better scripting techniques, as well as came up with more ideas for the mod. In February of 2004 the server and EDM returned to U1. I quickly went to work converting all my UT code to U1 format, and so we ended up with an EDM that worked but was somewhat glitchy. After many, many updates EDM finally came to a stable state and started requiring less and less updates. The demand for the mod grew...more and more people kept asking for it. It was finally decided to let the mod loose upon the community.

After breaking with Yellow Sub, I started to run my own server, which of course ran EDM. I noticed little tiny problems with it here and there, and also after studying the code for some time, became aware of multiple security holes in the mod, some of the holes being in Unreal itself. I went to work patching up these holes, and in the process I removed some features, while increasing mutator support so that the features could always be added in at a later date at the push of a button. EDM shrunk a bit in size, yet its ability increased. New text effects, a more stable color rendering system, a more powerful console and mutators and bam, EnhancedDM2 was under way. It was much easier to study the workings of the mod on a server of my own rather than on someone else's. I was also in total control of putting updated files on the server, so glitches that were noticed would be gone within the hour. A non-glitchy, steady running, non-FPS murdering version of the old EDM evolved with some new features along the way, and when I finally stopped making so many damn updates for it (;)) I released it for public download, in the hopes of helping those who were running EnhancedDM1, or the "swiss cheese" mod as I like to call it.

I did not intend to do any more work on the mod, ever, but due to some blatent security issues in Unreal that I was made aware of several months later, I set out to begin EDM3 and help stop the issues, as well as patch up any significant errors that I had left behind with my work in EDM2 - mainly the glitchy method of console replacement.


...It was supposed to be done with EDM3...I left the Unreal scene and announced my retirement from coding. Out of boredom one day (and the fact that I have no life), I reviewed the EDM3 code and noticed some things that needed changing. I changed them and saved them as EDM4, but never mentioned nor released it since I figured everyone was tired of updates, and most people complained about EDM3 anyway. Soon enough, a necessity for EDM4 on the TNN servers came about, and so I helped out by releasing this....

---===Changes from EDM3===---

Absolutely NO new features - EDM4 is a simple bug fix for EDM3, mainly fixing that crash between level switches. All known crashes and errors from EDM3 have been resolved.




---===Installation===---

Every file except EDMSkaarjSkins.utx should be copied into your Unreal\System directory. EDMSkaarjSkins.utx should be copied into your Unreal\Textures directory.

To configure the options for EnhancedDM inside the game, go to Advanced Options, then Game Types, then Enhanced Deathmatch. To edit it outside of Unreal, open EnhancedDM.ini. The default game settings for EnhancedDM.ini are these:

[EnhancedDM4.EnhancedDM]
AdminPassword=defaultpassword
GamePassword=
UT_Air_Control=True
MapVote=True
ScoreRecovery=True
SingleVoting=True
SingleVotingTime=60.000000
MapVotePercent=51
bNoMonsters=False
bHumansOnly=False
bCoopWeaponMode=True
bClassicDeathmessages=False
bHardCoreDamage=True
TopMOTD[0]=(strTopMOTD="")
TopMOTD[1]=(strTopMOTD="")
TopMOTD[2]=(strTopMOTD="")
MaxNameLimit=45
NormalNameLimit=25
CheckDownloaders=True

IF YOU HAVE ANY INI FILES FROM PREVIOUS EDM VERSIONS, PLEASE REPLACE THEM WITH THESE!

IN ORDER FOR THE CUSTOM SKAARJ TEAM SKINS TO WORK, YOU MUST(!!!) ADD EDMSkaarjSkins to your server packages. PLEASE Keep in mind, EDM4 offers new skins ONLY for the Skaarj because Unreal did not come with them to begin with. If you would like to use the custom skins from UTeamFix, please read about the "EDMUTeamSkins" mutator in the mutator readme file.

The maplist in EnhancedDM is not read from the normal Unreal maplist. EDM has its own maplist. This can be accessed from Advanced Options, then EDM Map List. IGNORE the "Maps" setting and the "MapNum" setting. These are ignored by the mod! Only use "xMaps" and "xMapNum." You can set up to 1000 maps in rotation. This can also be edited from EDMMAPS.ini.

If you would like to use the EDM ServerQuery, then open Unreal.ini and find the spot that says:
	ServerActors=IPServer.UDPServerQuery 

Replace it with:
	 ServerActors=EDM4ServerQuery.EDMServerQuery

PLEASE READ THE EDMSERVERQUERY.TXT FILE TO MAKE SURE YOU USE THE RIGHT ONE

---===INCOMPATIBILITES!!!===---

Since EDM4 has its own custom console, some antibots are not very fond of it. The most popular ones are the hackbusta series. HB1, HB2, HB3....none of these will be happy with EDM4. SBAB is not happy with EDM4 either. Do not run them or else all players will end up being booted.

UProtect will run fine with EDM4. This is the best recommended antibot for it.

---===Setting Explanation===---

AdminPassword - The admin password of the server. DO NOT use the admin password that is set under UnrealShare.DeathmatchGame - it will be overridden by this one.

GamePassword - A password to enter the game. The same rule as the Admin Password applies here - DO NOT use the one in UnrealShare.DeathmatchGame.

UT_Air_Control - When enabled, players will have the amount of air control that they would have in UT.

MapVote - Enables/disables the ability for clients to vote for a map

MapVotePercent - The percent of players that must vote on a map for it to change.

ScoreRecovery - Enables/disables score recovery. NOTE: "Score Recovery" also applies to deaths :P

TopMOTD - A "message of the day" that will be displayed on top of people's scoreboards. When set to blank, nothing is displayed. There are three different lines for three different messages. This can only be configured from EnhancedDM.ini or in the game using the "Admin SetMOTD" command. Colors codes are accepted.

NormalNameLimit - The length that a player's name can be when effect tags aren't counted

MaxNameLimit - The length that a player's name can be, counting effect tags

SingleVoting - Enables or disables the ability for a single player to change the map by voting for it. This means that when enabled, if a player is in the server alone, they may mapvote and change the map as long as the map has been running for AT LEAST as long as SingleVotingTime (so that a player can't enter early and switch the map before others enter). When this option is disabled, then at least two players must be present for a map to be voted for, no matter what.

SingleVotingTime - The amount of time that must pass before one player will have the ability to mapvote on his own. 

bHardCoreDamage - Whether or not to have hardcore damage on. When bHardCoreMode is true, then the game will run at hardcore speed and players will have hardcore jumping height, but this must also be enabled for the damage to be hardcore.

---===Features===---

Score Recovery - When you leave the game, if the map has not changed the next time you enter, your score will be given back to you.

Lag Graph - Your ping patterns are graphed out for you on a graph on the bottom right of your screen. If troublesome, it can be disabled.

Idle Times - If a player has gone idle, their idle time (in seconds) will be displayed next to their name on the scoreboard.

Private Messaging - ID #'s are displayed to the left of players' pings. You can send them private messages by this #.

Hiding Chat - Do constant chatters bother you? Simply enable this option and their text will be hidden from your view.

Hiding Death Messages - Tired of a screen full of big red death messages? Enable this to hide them from your view.

Statuses - Players can set statuses that will make a symbol appear to the left of their name on the scoreboard. The available statuses are: Present, Away, Sleeping, Eating

Colored Text - By use of color tags, players can put colors inside of their names or in the text they type. Text can also be put into bold or flash.

Smilies - Smiley faces are displayed in place of the normal chat text smiles. ":)" turns into an actual round, yellow, happy face :)

UGold/UT Type Console - Tired of getting VM errors when you hit tilde to read someone's long message? The typical, crash-prone console has been replaced with another console that uses the same style as Unreal Gold and UT. This console will not cause the same crashes and is also capable of displaying text colors and smilies. Normal messages are separated from chat messages to make reading conversation easy.

Downloader Display - When someone downloads from the server, their name, current file, and percent completed will be drawn on the bottom right hand side of the scoreboard.

Detailed Spec HUD - Spectators can now see a player through their own eyes. The spec HUD reports Armor, Ammo, Kills, and a few other tidbits of information about a player that is being watched.

MapVote - When enabled, players can vote for what map they want to play on. The mapvote reads all the maps from the internal maplist included with EDM.

Scoreboard information display for admins - Players' IP, Computer Name, and Engine Version can be checked right from the scoreboard.

An IPLOG of all players who have connected -  Whenever a player connects, if their player name or IP has never been logged before, they will be added to EDMIPLOG.ini. This log can hold up to 1500 entries. 

Banning from the server results in the server being hidden from the view of the banned person's server browser (only when the EDMServerQuery is in use.) 

Admins can connect to the server even if it is full.

You will no longer crash from throwing your weapons too fast! (unless you do it for an EXCESSIVELY long amount of time, but this should never occur during normal gameplay.)

Voice pack support! Players can enter with voicepacks to make text sounds turn into REAL sounds during gameplay ;)

Dynamic team scoreboard - The team scoreboard will adjust its display based on what teams are present and how many players are on each team

Right click capabilities inside the Main Chat console tab for admins - allows for easy command execution on players

Right click capabilities inside the mapvote window for admins - allows for insanely easy maplist configuration

Your most used weapon statistic (for those who care :P) is calculated and displayed on the lower right hand corner of the Client Options console tab

NeverSwitchOnPickup is now a configurable option in the game that will stay in all EDM4 servers

---===Client Commands===---

PS (ID) (MESSAGE)

By getting an ID number off of the scoreboard, a player can send a message to the ID belonging to that player. You hit tab, then type "PS", then ID, then the message. For example, to send the message "HI" to ID#1, I would type:

PS 1 HI

You can also hit tilde(~), go to the "Main Chat" tab, and double click on a player's name below to start a private conversation with them.

RequestScore

In the event that lag prevents the score recovery from working properly, a client can type RequestScore to send a message to the server to see if their score can be recovered. If so, the score is recovered.

SetStatus (STATUS)

This settings is accessible through the client menu, but can also be done with this command. You hit tab and type "SetStatus" and then the status you want. The available statuses are: Present, Away, Sleeping, and Eating

Votemap (MapNum)

When a player votes for a map through the menu, the map number is displayed next to the map inside the menu and also when it announces to the server that the map has been voted for. If you decide to not use the menu and use this command, you can vote for a map by its number.

AdminLogin (AdminPassword)

If the AdminPassword is correct, a player can log in as an admin. Admin log-ins are not announced to the server, but they are announced to other admins.

AdminLogout - Logs an admin out of admin

SetConsoleTyped (ANYTHING!) 

If you bind this to a key, whatever the "ANYTHING" is will be typed for you when you press it! For example, if you keep kicking someone and they keep re-entering, just make a bind that says "SetConsoleTyped Admin KickID " - every time you press it, "Admin KickID " will be typed for you, so all you do is type the new ID #!

SetVoice (VoicePackClass)

This will set the client's current voicepack to whatever the class if. If the voicepack class is entered correctly, they will be told so. If entered incorrectly, they will be told as well.

VoiceSay (SoundNumber)

Based on what the client has set as their voicepack class, this command will use whatever sound is set inside the client's voicepack class under the entered number.

SpecSay (MESSAGE)

A command that only spectators may use to speak to other spectators.

---===Admin Commands===---

Admin KickID (ID) - Kicks a player whose ID# matches ID
Admin BanID (ID) - Bans a player whose ID# matches ID
Admin MuteID (ID) (TIME) - Mutes a player whose ID# matches ID for the length of time that TIME is.
Admin BanIP (IP) - Bans an IP.
Admin Skip - Skips to the next map in rotation
ListBanned - Lists the banned IPs
LogSearch (IP/NAME) - Searches the IP log for entries matching the IP or Name entered
GetCompName (ID) - Returns the computer name of the player whose ID# matches ID
GetConsole (ID) - Returns the console name of the player whose ID# matches ID
GetIP (ID) - Returns the IP of the player whose ID# matches ID
BoardStyle - Changes the display on the scoreboard between IP, CompName, Version, or hidden
Admin AddMap (MAPNAME) - Adds a map to the map list
Admin ModifyMap (MAPNUM) (NEWNAME) - Changes the map whose number is MapNum to NEWNAME
Admin RemoveMap (MAPNUM) - Removes the map whose map number is MAPNUM. Map numbers can be obtained by viewing the maplist
			    in the mapvote window.

Admin ComplexCheck (ID) - Performs a series of CRC checks to see if a client is using cheats. ONLY recommended for desperate 			   situations - HIGHLY RECOMMENDED that an admin runs UProtect on their server instead. Also, this 			  	   function DOES NOT have Mac support.

Admin RemovePoints (ID) (POINTS) - Removes POINTS from the player whose ID# matches ID
AdminTalk (Message) - Say text that only other admins can read

ShowAdmins - Toggles admin display on the scoreboard. Will show you who the other admins are by putting a purple asterik to 	      	      the left of their name.

Admin SetMOTD (Line) (Msg) - Adds to the MOTD on top of the scoreboard. You can use lines 1-3. Color and smilie capability 			      	      exists here. i.e. Admin SetMOTD 1 Hi  - This would write "Hi" on MOTD Line 1 above the 			     		      scoreboard.

Admin MiddleSay (NUM) (MSG) - Says a message in a spot on the screen. You can change "NUM" to any number 0-7 to make it 			       	       appear in a different spot. NOTE: If a player has "Show Mutator Add-ons" set to false, they 
			       will NOT receive messages when NUM is 7.

SummonP (ID) - The player whose ID# matches "ID" will be teleported in front of the admin who types this (ADAPTED FROM 			jCoop4, CREDITS TO JOSS)

PSummon (ID) - The admin who types this will be teleported in front of the player whose ID# matches "ID" (ADAPTED FROM 			jCoop4, CREDITS TO JOSS)

NoFly - When flying or in ghost mode, this command will make you normal again without having to suicide (ADAPTED FROM 	 	 	 jCoop4, CREDITS TO JOSS)

ChangeSetting (Setting) - This will change the settings of the game, game replication info, or TCP/IP Settings. For example, you could change maxplayers, maxspectators, gamepassword, adminpassword, servername, MaxTicksPerSecond, MaxClientRate, etc. The way it works is like this:

ChangeSetting (Setting) (Value)

i.e.

ChangeSetting AdminPassword (NewPassword)

This would change the Admin password to whatever "NewPassword" is

GetSetting (Setting) - Just like ChangeSetting, except it returns the value for whatever setting you're trying to get.
			i.e. "GetSetting AdminPassword" would return the admin password

Admin GetMutList - Returns a list of all mutators currently in the "EstablishedMutators" array
Admin Addmut (MUTCLASS) - Adds a new mutator class to the Established Mutators array
Admin Removemut (MUTNUM) - Removes a mutator from the Established Mutators array based on it's number in the array (Use the 			    	    GetMutList command to see which mutators are which numbers)

---===Other Info for Admins===---

"So and so was kicked for changing his client-side time dilation!"

There is a console command that exists that lets players actually change the speed at which their game runs as opposed to the speed that the server runs at. So a player can make other players appear to move in slow-mo while the server is still normal. Obviously this allows the client to have more time to aim at his targets, while also creating a nasty lag effect to other players. EDM4 has code which detects if a player's time dilation differs from the server one. The only problem is that if a player is lagging excessivly when they first connect to the server, innaccurate data may be sent. So, if you receive a message saying someone has been kicked for changing their client-side time dilation, NEVER use that as a basis for banning or yelling at someone. The protection will keep out all the players who intend to use it maliciously, while it may take out a few innocents in the process (who can just reconnect anyway and they won't get kicked again..). I have seen occasionally that a player may lag mid-game and send innaccurate data to the server. Once again, I would NOT use this message as a definite basis for banning/reprimanding someone - unless it happens repeatedly every time they join.

"So and so was kicked for changing his admin status client-side!!"

Just like timedilation, players can make the game on their end believe that they are an admin of the server. This can allow players to execute a few console commands that they normally wouldn't be able to if they were a "normal" player. (i.e. Fov, Rmode). There is no excuse for this one. If someone is kicked for this then they have tried to make their game believe that they are an admin.

"So and so was kicked for changing his client-side netmode!!"

Also, like time dilation, players can mess with netmode settings on their client. This detection is pretty certain, and I highly doubt a true excuse would ever exist for setting this one off.


---====Changes from EDM2====---

--Security Fixes
	--> Notorious client-side modification commands have now been rendered useless
	--> Package checking code has been MUCH improved over EDM2 - cache packages checked correctly now, however
	    there is no MAC support

--Console Changes
	--> The entire method of console replacement has been modified to hopefully create less crashes and a smoother
	    changeover when switching from the custom console back to the original
	--> The buttons in the client options look a bit more fancy ;)
	--> Users can now press Shift+Tab to switch between tabs
	--> Spectators no longer have a "-99999999" score in the Main Chat tab namelist
	--> Text would sometimes overwrite other text in EDM2 - this should not happen anymore
	--> Private message windows used to malfunction when multiple messages were received or
	    the user reconnected to the server - this will not happen anymore
	--> The server list does not need to be refreshed again after the console has been replaced
	--> The Home, End, and Delete keys are now functional
	--> Percents and other strange characters will not be typed out if you hold shift and push the
	    arrow keys

--Text Effects
	--> :H (heart) icon
	--> :S (confused) smilie
	--> :* (kiss) smilie
	--> D: (angry/shocked) smilie
	--> ^d^ (darken color) ability

--General Changes
	--> The entire maplist can be configured by admins through the mapvote window - Add/Remove/Modify
	--> "SpecSay" has been implemented into the mod for spectators to use to speak to eachother
	--> There is a time limitation on how often someone can call the "Setname" command, so that players
	    can no longer spam the server with name changes.
	--> When a player gets muted and reconnects, their muted status is recovered even if ScoreRecovery is 
	    disabled
	--> Voicepacks are handled from EDM3Voice.u now, an independent package that can be subclassed by any
	    user, so now anyone can make their own voicepack package
	--> Players can no longer run and taunt at the same time, hiding their footsteps like little bastards :/
	--> Players can now configure the "NeverSwitchOnPickup" option in the EDM console - yes, it will save!


---====Changes from EDM1====---

--Security Fixes
	--> Players could grab screenshots of player IPs/Computer Names -- NO LONGER POSSIBLE
	--> The "ViewPlayerNum 0" command would let players spectate from other players -- NO LONGER POSSIBLE
	--> "ShowInventory" command would fill server log with an inventory listing -- NO LONGER POSSIBLE
	--> Players could ByteHack EnhancedDM.u to gain "fake admin" privileges and/or cause the mod to not 
	    return their IP/Computer Name info -- Much more difficult to do now

--Maplist error
	--> Maps beginning with same name as current map got chosen. i.e. If your map rotation had DmCurse and
	DmCurse]PMB[, the map list would get confused as to what map was currently running. It is now fixed.

--Console Changes
	--> Pushing escape no longer brings up a special EDM menu. All options can now be configured from
	a tab within the Console.
	--> Messages in the Console can now be accompanied with a timestamp (if the option is enabled)
	--> When a 224 admin goes to the server browser, the game no longer pauses
	--> Console monitors text that is said in Say and Teamsay and protects against excessive spam

--EDMServerQuery
	--> When server was at maximum capacity, lots of unnecessary "Temp Bans" would be put on IPs that
	queried the server. This will not happen as often.

--HUD Changes
	--> Lag Graph on lower right side of HUD can now display Frags/Minute
	--> HUD Message Display
		--> Message in HUD don't overlap eachother as often
		--> Messages in HUD no longer quickly disappear after appearing
	--> Users can now enable an option to pre-render all text effects while typing the text out. This way, players can
	preview what their names will look like when typing the Setname command (This is an option, so it can be enabled or 
	disabled, does not have to be on all the time.)

--Scoreboard
	--> MOTD on top of scores can now be hidden
	--> Boardstyle
		--> "Cons" display is no longer there
		--> New ability to hide IP/COMP/VERSION info (good for taking screenshots)
	--> The time is no longer displayed in the upper right-hand corner. Now it is displayed on the bottom
	of the console
	--> Frag and time limits are displayed in small text on the bottom left-hand side of the scoreboard
	--> Death display (This can be disabled)

--Text Effects
	--> New Text Effects
		--> Underline
		--> Medium font
		--> Random colors
		--> Translucency
		--> Light color
		--> No more >:/ and >:| smilies
		--> New :F icon
	--> More efficient color rendering code - less CPU powered used in the hopes of resulting in higher framerates

--General Changes
	--> When a player is muted, it is recovered if they reconnect
	--> Mutators are capable of taking more control of the game
	--> New option to disable downloader detection
	--> New option to disable score recovery
	--> Mapvoting is now done through a UWindow which can be accessed in the Client Options tab
	of the Console
	--> Removed features - SOME OF THESE CAN STILL BE USED THROUGH ADD-ON MUTATORS INCLUDED WITH THE MOD!
		--> Spawn Protection
		--> Full Ammo
		--> Destroy stuff
		--> Spawn with weapon
		--> Admin FreezePlayer
		--> Admin GetVersion
		--> Shower and Homework status are no longer available
		--> Profanity filter - a more or less useless feature, it was used mostly for laughs
	--> Voicepack support
	--> "Established Mutators" list
		--> An easy way to set up a list of mutators you'd like to use without having to bother with the long 
		command line
	--> New Admin Commands
		--> SummonP (ID) -CREDITS TO JOSS (jCoop4)
		--> NoFly -CREDITS TO JOSS (jCoop4)
	--> Right click menu inside of the Main Chat console tab for quick admin commands

-------
All code within this mod may NOT be reused for commercial purposes of any kind, and certainly not at all without my explicit persmission. If you have any questions about the code or would like to use/expand upon it, Email me at Smartbaiii@hotmail.com. In no way may you sell this mod to others, or make money off of it in any way, shape, or form. All code is the respected property of Smartball - any references to other coders (top of the this document), with the exception of Joss (whose code was taken and modified to conform to EDM), was purely for ideas, and not for code copying.
-------
NO WARRANTIES AND LIMITATION OF LIABILITY (DISCLAIMER)
The SOFTWARE PRODUCT is offered "AS IS" and the author makes no warranty as to its use or performance. THE ENTIRE RISK ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE PRODUCT REMAINS WITH YOU.
THE AUTHOR AND ITS CO-DEVELOPERS DO NOT AND CANNOT WARRANT THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING THE SOFTWARE OR DOCUMENTATION. THE AUTHOR AND ITS CO-DEVELOPERS MAKE NO WARRANTIES, EXPRESS OR IMPLIED, AS TO NONINFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY, OR FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT WILL THE AUTHOR OR ITS CO-DEVELOPERS BE LIABLE TO YOU FOR ANY CONSEQUENTIAL, INCIDENTAL OR SPECIAL DAMAGES, INCLUDING ANY LOST PROFITS OR LOST SAVINGS, EVEN IF AN THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY THIRD PARTY.